package com.sc.nft.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sc.nft.entity.UserCreatorInfo;
import com.sc.nft.entity.dto.*;
import com.sc.nft.entity.vo.*;
import com.sc.nft.entity.vo.ecology.adminDaoPhoneVO;
import com.sc.nft.entity.vo.salvageEvents.PageDaoEcologyPointsTransferRecordsVO;
import com.sc.nft.sup.PageRequest;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 服务接口
 *
 * @author Sun
 * @description 由 Mybatisplus Code Generator 创建
 * @since 2022-05-30 15:17:11
 */
public interface UserCreatorInfoService {

    //作者下拉框
    List<UserCreatorInfo> getUserCreator();

    //分页查询作者
    Page<UserCreatorInfo> pageUserCreator(int pageNo, int pageSize, String nickName);

    //修改作者信息
    Boolean updateUserCreator(Long id, String nickName, String creatorPresentation, String creatorAvatarImg);

    Boolean addUserCreator(String nickName, String creatorAvatarImg, String creatorPresentation);

    //修改藏品的作者列表
    Page<UserCreatorListVO> getUserCreatorList(int pageNo, int pageSize);

    /**
     * 用户申请创建Dao
     *
     * @param userApplyCreatedDaoDTO
     * @return
     */
    Boolean userApplyCreatedDao(UserApplyCreatedDaoDTO userApplyCreatedDaoDTO);

    /**
     * 获取我自己创建的dao列表
     *
     * @return
     */
    Page<GetUserApplyCreateDaoVO> getUserApplyCreateDaoVO(PageRequest pageRequest);

    /**
     * 用户加入的dao
     *
     * @param pageRequest
     * @return
     */
    Page<GetUserApplyCreateDaoVO> userJoinGroup(PageRequest pageRequest);

    /**
     * 品牌岛
     *
     * @return
     */
    List<HomeBrandIslandVO> homeBrandIsland();

    /**
     * 品牌岛全部带分页
     *
     * @param request
     * @return
     */
    Page<HomeBrandIslandVO> homeBrandIslandPage(HomeBrandIslandDTO request);

    /**
     * 获取dao数据详情
     *
     * @param id
     * @return
     */
    GetDaoByIdVO getDaoById(Long id);

    /**
     * 批量获取dao数据详情并且转换成map,为了提供一次性查询
     *
     * @param ids
     * @return
     */
    Map<Long, UserCreatorInfo> getDaoByIdsToMap(List<Long> ids);

    /**
     * 获取品牌的Dao模块
     *
     * @return
     */
    GetDaoByIdVO getCertainlyShowDao();

    /**
     * 后台管理获取dao列表
     *
     * @param adminPageListDTO
     * @return
     */
    Page<AdminUserCreatorInfoVO> getAdminPageList(AdminPageListDTO adminPageListDTO);

    /**
     * 获取所有dao
     *
     * @return
     */
    List<AdminUserCreatorInfoAllDao> getAll();

    /**
     * 后台新增品牌
     *
     * @param addBrandVO
     */
    void adminInsert(AddBrandVO addBrandVO);

    /**
     * 创建dao
     *
     * @param creationDaoDTO
     */
    void creationDao(CreationDaoDTO creationDaoDTO);

    /**
     * DAO信息查询
     *
     * @param daoId
     * @return
     */
    CreationDaoDTO findByDaoId(Long daoId);


    /**
     * 创建dao
     *
     * @param creationDaoDTO
     */
    void updateDao(CreationDaoDTO creationDaoDTO);

    /**
     * gas充值
     *
     * @param dto
     */
    void gasReg(GasRegDTO dto);


    /**
     * 品牌修改
     *
     * @param updateBrandDTO
     */
    void updateBrand(UpdateBrandDTO updateBrandDTO);

    /**
     * 根据id获取品牌
     *
     * @param id
     * @return
     */
    AdminGetByIdVO adminGetById(Long id);

    /**
     * 审核状态修改
     *
     * @param id
     * @param status
     * @return
     */
    Boolean updateInfoStatus(Long id, Integer status);


    UserCreatorInfo getById(Long id);

    /**
     * 根据藏品id获取他下面在售的商品
     *
     * @param id
     * @return
     */
    List<GetWhatHeSSellingUnderTheCollectionVO> getWhatHeSSellingUnderTheCollectionId(Long id);

    /**
     * 获取所有dao的简单列表
     *
     * @param daoName
     * @param pageNo
     * @param pageSize
     * @return
     */
    Page<SimpleDaoPageVO> getSimpleDaoPage(String daoName, Integer pageNo, Integer pageSize);

    /**
     * 获取所有dao的简单列表(配置上线时间)
     *
     * @param daoName
     * @param pageNo
     * @param pageSize
     * @return
     */
    Page<SimpleDaoPageVO> getSimpleOnlineTimeDaoPage(String daoName, Integer pageNo, Integer pageSize);

    /**
     * 获取dao的身份列表
     *
     * @param daoId
     * @param collectionName
     * @param identityName
     * @param pageNo
     * @param pageSize
     * @return
     */
    Page<AdminSimpleDaoIdentityVO> getSimpleDaoIdentityPage(Long daoId, String collectionName, String identityName, Integer pageNo, Integer pageSize);

    /**
     * 条件查询DAO生态燃料转账记录
     *
     * @param daoId
     * @param toUserTel
     * @param startTime
     * @param endTime
     * @param pageNo
     * @param pageSize
     * @return
     */
    Page<PageDaoEcologyPointsTransferRecordsVO> getPageDaoEcologyPointsTransferRecords(Long daoId, String toUserTel, Date startTime, Date endTime, Integer pageNo, Integer pageSize);

    /**
     * 获取用户所属的网体
     *
     * @param userId
     * @return
     */
    Long theNetworkToWhichTheUserBelongs(Long userId);

    List<AdminUserCreatorInfoAllDao> getAllByStatus();

    /**
     * 更新星级
     *
     * @param id
     * @param starScore
     * @return
     */
    Boolean updateStarRating(Long id, Long starScore);

    /**
     * 更新是否开启生态池
     *
     * @param id
     * @param enableEcologyPool
     * @return
     */
    Boolean updateEnableEcologyPool(Long id, Boolean enableEcologyPool);

    /**
     * 是否加入排行榜
     *
     * @param id
     * @param enableJoinRank
     * @return
     */
    Boolean updateEnableJoinRank(Long id, Boolean enableJoinRank);


    /**
     * 获取所有加入生态池和排行榜的品牌
     *
     * @return UserCreatorInfoExcelVO
     */
    List<UserCreatorInfoExcelVO> listUserCreatorByPool();


    /**
     * Dao手机号列表
     *
     * @param adminPhonePageDTO
     * @return
     */
    Page<AdminUserCreatorInfoPhoneVO> findUserCreatorPhoneList(AdminPhonePageDTO adminPhonePageDTO);

    /**
     * 修改Dao品牌手机号
     *
     * @param userCreatorPhoneAddDTO
     */
    void userCreatorAddPhone(UserCreatorPhoneAddDTO userCreatorPhoneAddDTO);


    adminDaoPhoneVO adminPhoneById(Integer id);

    /**
     * 删除
     *
     * @param id
     */
    void updateDaoPhoneNoStatus(Long id);

    /**
     * 获取用户所属的网体
     *
     * @param userId
     * @return
     */
    List<Long> getUserBelongingToDao(Long userId);

    /**
     * 更新是否开启saas展示生态熔炼
     *
     * @param id
     * @param showEcologyStatus
     * @return
     */
    void updateShowEcologyStatus(Long id, Boolean showEcologyStatus);

    /**
     * 查看是否开启saas展示生态熔炼
     *
     * @param id
     * @return
     */
    Boolean getShowEcologyStatus(Long id);

    /**
     * @param id
     * @param showPledgeStatus
     */
    void updateShowPledgeStatus(Long id, Boolean showPledgeStatus);

}
